"use strict";
var util = require('util');
var mysql = require('./ci.min.js');
/*
 author:钱波
*/
// ************************连接数据库***************************
var dbname = null;

// *************************函数********************************
/*创建数据表和视图*/

function oper_(table,data,cb){
    var db = mysql.createNew(dbname);
    if (table == 'role') { // 改用户角色为普通用户:删除角色时
        // data里面的id是role表里面的  ==  user表里面的roleid
        var query = {};
        query.roleid = data.id;
        //obj.db_change_userrole(query,cb);
        db.where(query);
        db.update('user', { roleid:'0'}, function (status, res) {
            if (cb) {
                cb(status,res);
            }
        })
    }else if (table == 'project') { // 删除项目时
        // data里面的是id是project表里面的  ==  device表里面的projectid
        var query = {};
        query.projectid = data.id;
        //obj.db_project_unbind(query,cb);
        db.where(query);
        db.update('device', { projectid:'0'}, function (status, res) {
            // console.log(query,status,res);
            var qq = {};
            var project_id = -1;
            if (status == 1) {
                if (query.projectid[0] == "=") {
                    var len =  query.projectid.length;
                    project_id = query.projectid.substr(1,len-1);
                    qq.power = '"projectid":'+ project_id;
                }
                else
                    qq.power = query.projectid;
                db.select('id,power');
                db.where(qq);
                db.get("role");  //得到所有的sql；
                db.result(function (ret, info) {
                    if (ret == 1) {
                        for(var i =0;i<info.length;i++){
                            var pp = JSON.parse(info[i].power);
                            var roleid = info[i].id;
                            var obj_now = [];
                            for(var j =0;j< pp.length;j++){
                                var pid = pp[j].projectid;
                                if(pid != project_id){
                                    obj_now.push(pp[j]);
                                }
                            }
                            db.where({id:roleid});
                            db.update('role',{power:JSON.stringify(obj_now)},function(status,res){
                        
                            });
                        }
                        if (cb) {
                            cb(1,'ok');
                        }
                    }
                })
           
            }else{
                if (cb) {
                    cb(-1,'删除失败')
                }
            }
        })

    }else{
        if (cb) {
            cb(1,'ok');
        }
    }
}


/*
接口
*/
class Db_modules{
    constructor(){
    }
    // 分页查询(按类型，排序，指定字段)
    db_info_type_page(req,fields,tablename,currentPage, itemsPerPage,sidx,sord,cb){
        var db = mysql.createNew(dbname);
        var start = (currentPage - 1) * itemsPerPage;
       var pagecount;
       if (fields == null) {
          fields = '*';
       }
       db.select(fields);
       var c = Object.keys(req.query);
       if (req.field != null && req.field != '' && req.field_arr != null) {
          if (Array.prototype.isPrototypeOf(req.field_arr) == true) { //如果是数组
            if (req.field_arr.length > 0) {
              db.where_in(req.field,req.field_arr);
            }          
          }
        }
       if(c.length > 0){
            db.where(req.query);
        }     
       db.limit(start, itemsPerPage);
       if (sidx != null && sord != null) {
         db.order_by(sidx, sord);
       }else{
         db.order_by('id','desc');
       }
       db.get(tablename);  //得到所有的sql；
       db.count_all_results(function (satus, result) {
           if (satus > 0) {
               db.result(function (sta, res) {
                   pagecount = parseInt((result - 1) / itemsPerPage + 1);
                   if (cb) {
                       cb(1,{page:currentPage,records:result,pagecount:pagecount,rows:res});
                   }

               })

           }
       })
    }
    // 不分页查询(按类型，指定字段)where   where_in
    db_select_list(key,value,query,fields,tablename,sidx,sord,cb){
        var db = mysql.createNew(dbname);
       if (fields == null) {
          fields = '*';
       }
       db.select(fields);
       if (query != null) {
         var c = Object.keys(query);
         if(c.length > 0){
               db.where(query);
          } 
       }
       if (key != null && key != '' && value != null) {
          if (Array.prototype.isPrototypeOf(value) == true) { //如果是数组
            if (value.length > 0) {
              db.where_in(key,value);
            }          
          }
       }           
       if (sidx != null && sord != null) {
         db.order_by(sidx, sord);
       }else{
         db.order_by('id','desc');
       }
       db.get(tablename);  //得到所有的sql；
       db.result(function (status, res) {
           if (cb) {
               cb(status,res);
           }
       })
    }
    // 不分页查询(按类型，指定字段)where   where_in is not null;
    db_select_list2(key,value,query,fields,tablename,sidx,sord,str,cb){
        var db = mysql.createNew(dbname);
       if (fields == null) {
          fields = '*';
       }
       db.select(fields);
       if (query != null) {
         var c = Object.keys(query);
         if(c.length > 0){
               db.where(query);
          } 
       }
       if (str != null) {
         db.where_is_null(str);
       }
       if (key != null && key != '' && value != null) {
          if (Array.prototype.isPrototypeOf(value) == true) { //如果是数组
            if (value.length > 0) {
              db.where_in(key,value);
            }          
          }
       }           
       if (sidx != null && sord != null) {
         db.order_by(sidx, sord);
       }else{
         db.order_by('id','desc');
       }
       db.get(tablename);  //得到所有的sql；
       db.result(function (status, res) {
           if (cb) {
               cb(status,res);
           }
       })
    }
    // 不分页的where_in查询多条数据
    db_select_where_in(key,value,fields,tablename,cb){
        var db = mysql.createNew(dbname);
       if (fields == null) {
          fields = '*';
       }
       db.select(fields);
       if (key != null && key != '' && value != null) {
          if (Array.prototype.isPrototypeOf(value) == true) { //如果是数组
             if (value.length > 0) {
                db.where_in(key,value);
             }else{
                if (cb) {
                  cb(-1,'条件出错');
                }
                return;
             }        
          }
       }else{
         if (cb) {
          cb(-1,'条件出错');
         }
         return;
       }
       db.get(tablename);  //得到所有的sql；
       db.result(function (status, res) {
           if (cb) {
               cb(status,res);
           }
       })

    }
    // 查询指定数量 
    db_get_count(key,value,field,tablename,query,cb){
        var db = mysql.createNew(dbname);
        if (field != null) {
          db.select(field);
        }       
        if (key != null && key != '' && value != null) {
            if (Array.prototype.isPrototypeOf(value) == true) { //如果是数组
               if (value.length > 0) {
                  db.where_in(key,value);
               }
            }
         }
        if (query != null) {
           var c = Object.keys(query);
           if(c.length > 0){
                 db.where(query);
            } 
        }
        db.distinct();
        db.get(tablename);
        db.count_all_results( function (status,res) {
           if (cb) {
             cb(status,res);
           }
        })
    }
    // 查询指定的一条数据:用户
    db_get_detailuser(tablename,query,cb){
        if (query == null) {
          return;
        }
        var db = mysql.createNew(dbname);
        db.get_where(tablename, query);
        db.row(function(status,results){         
          if (status == 1 && results.roleid != '0'){
            db.get_where('role',{id:results.roleid});
            db.row(function(status1,results1){
               if (cb) {
                  cb(status,results,results1.power);
                }
            })
          }else{
            if(cb){
                cb(status,results,'0');
            }
          }
                    
      })
    }
    // 查询指定的一条数据
    db_get_detail(tablename,query,cb){
        if (query == null) {
          return;
        }
        var db = mysql.createNew(dbname);
        db.get_where(tablename, query);
        db.row(function(status,result){
            if (cb) {
              cb(status,result);
            }
        })
    }
    // 查询指定的一条数据的指定字段
    db_get_detail_field(tablename,query,fields,cb){
        if (query == null) {
          return;
        }
        if (fields == null) {
          fields = '*';
        }
        var db = mysql.createNew(dbname);
        db.select(fields);
        db.get_where(tablename, query);
        db.row(function(status,result){
            if (cb) {
              cb(status,result);
            }
        })
    }
    // 插入一条数据
    db_info_insert(data,tablename,cb){
        var db = mysql.createNew(dbname);
        db.insert(tablename, data, function (status, res) {
           if (cb) {
            cb(status,res);
           }
        })
    }
    // 插入多条数据
    db_info_insert_mul(table,arr,cb){
        var db = mysql.createNew(dbname);
      db.insert_batch(table, arr, function (status, res) {
          if (cb) {
            cb(status,res);
           }
      })
    }
    // 更新一条数据
    db_info_update(data,query,tablename,cb){
        var db = mysql.createNew(dbname);
        var c = Object.keys(query);
        if(c.length > 0){
             db.where(query);
        }else{
          if (cb) {
            cb(-1,'没有条件');
          }
          return;
        } 
        // console.log(tablename,query,data);
        db.update(tablename, data, function (status, res) {
            if (cb) {
              cb(status,res);
            }
        })
    }
    // 创建表
    db_create_table(define,cb){
        var db = mysql.createNew(dbname);
      db.create_table(define, function (status, res) {
         if (cb) {
          cb(status,res);
         }
      })
    }
    /////////////////////
   

    // 删除一条数据
    db_info_delete(data,tablename,cb){
        var db = mysql.createNew(dbname);
        db.where(data);
        db.delete(tablename, function (status, res) {
          if(status == 1)
              oper_(tablename,data,cb);
          else
            if(cb!=null)
              cb(-1,"notok");
        })
    }
    // 删除多条数据
    db_info_delete_mul(table,field,arr,cb){
        var db = mysql.createNew(dbname);
      db.where_in(field, arr);
      db.delete(table, function (status, res) {
          if (cb) {
            cb(status,res);
          }
      })
    }
    // 删除一张表
    db_delete_table(table,cb){
        var db = mysql.createNew(dbname);
        db.drop_table(table, function (status, res) {
            if (cb) {
              cb(status,res);
            }
        })
    }
    // 删除表中某一列
    db_delete_column(table,column,cb){
        var db = mysql.createNew(dbname);
      db.drop_column(table,column, function (status, results) {
        if (cb) {
          cb(status,results);
        }
      })
    }
    // 修改表的列
    db_edit_column(table,column,data,cb){
        var db = mysql.createNew(dbname);
      db.modify_column(table, column, data,function(status,result){
         if (cb) {
          cb(status,result);
         }
      })
    }
    // 获取表的所有列
    db_table_columns(table,cb){
        var db = mysql.createNew(dbname);
      db.list_fields(table, function (status, res) {
         if (cb) {
          cb(status,res);
         }
      })
    }
    // 添加表中的一列
    db_add_column(table,data,cb){
        var db = mysql.createNew(dbname);
      db.add_column(table,data,function(status,res){
         if (cb) {
          cb(status,res);
         }
      })
    }
    db_change_userrole(query,cb){//删除角色时
        var db = mysql.createNew(dbname);
      db.where(query);
      db.update('user', { roleid:'0'}, function (status, res) {
         if (cb) {
            cb(status,res);
         }
      })
      
    }
    // 将绑定某个设备的所有项目都和它断开:删除项目时
    // db_project_unbind(query,cb){
    //     var db = mysql.createNew(dbname);
    //   db.where(query);
    //   db.update('device', { projectid:'0'}, function (status, res) {
    //      console.log(query,status,res);
    //      var qq = {};
    //      var project_id = -1;
    //      if (status == 1) {
    //        if (query.projectid[0] == "=") {
    //            var len =  query.projectid.length;
    //            project_id = query.projectid.substr(1,len-1);
    //            qq.power = '"projectid":'+ project_id;
    //        }
    //        else
    //           qq.power = query.projectid;
    //        db.select('id,power');
    //        db.where(qq);
    //        db.get("role");  //得到所有的sql；
    //        db.result(function (ret, info) {
    //           console.log("power1",ret,info);
    //           if (ret == 1) {
    //             for(var i =0;i<info.length;i++){
    //                 var pp = JSON.parse(info[i].power);
    //                 var roleid = info[i].id;
    //                 var obj_now = [];
    //                 for(var j =0;j< pp.length;j++){
    //                      var pid = pp[i].projectid;
    //                      if(pid != project_id){
    //                          obj_now.push(pp[i]);
    //                      }
    //                 }
    //                 db.where({id:roleid});
    //                 console.log("power",roleid,obj_now);
    //                 db.update('role',{power:JSON.stringify(obj_now)},function(status,res){
                        
    //                 });
    //             }
    //             if (cb) {
    //               cb(1,'ok');
    //             }
    //           }
    //        })
           
    //      }else{
    //        if (cb) {
    //         cb(-1,'删除失败')
    //        }
    //      }
    //   })
    // }

}

module.exports = new Db_modules;